package com.hspedu.generic;

/**
 * @author DL5O
 * @version 1.0
 */
public class Generic03 {
    public static void main(String[] args) {
        Person<String> ywl = new Person<>("ywl");

        ywl.show();//String

        /*
            可以这样理解，上面的Person类
            把E 替换成了String，可以这样理解，但这样不太准确
         */

        Person<Integer> integerPerson = new Person<>(100);
        //E 这个泛型在定义的时候就知道了
        integerPerson.show();//Interger
    }
}

//泛型的作用:可以在类声明时通过一个标识表示类中某个属性的类型,
// 或者是某个方法的返回值的类型，或者是参数类型。
class Person<E>{
    E s;
    //E表示 s的数据类型，该数据类型是在定义Person对象的时候指定的，
    // 即在编译期间就确定了E是什么类型了

    public Person(E s) {//E也可以是参数类型中体现
        this.s = s;
    }

    public E f(){//返回类型使用E
        return s;
    }

    public void show(){
        System.out.println(s.getClass());//输出显示S的运行类型
    }
}